package com.gxc.matrix;

import java.util.*;

/**
 * 给定一个仅包含0和1的N*N二维矩阵，请计算二维矩阵的最大值，计算规则如下：
 *
 * 1、 每行元素按下标顺序组成一个二进制数（下标越大越排在低位），二进制数的值就是该行的值。矩阵各行值之和为矩阵的值。
 * 2、允许通过向左或向右整体循环移动每行元素来改变各元素在行中的位置。
 *
 * 比如：
 * [1,0,1,1,1]向右整体循环移动2位变为[1,1,1,0,1]，二进制数为11101，值为29。
 * [1,0,1,1,1]向左整体循环移动2位变为[1,1,1,1,0]，二进制数为11110，值为30。
 *
 * 输入描述
 * 输入的第一行为正整数，记录了N的大小，0 < N <= 20。
 * 输入的第2到N+1行为二维矩阵信息，行内元素边角逗号分隔。
 * 输出描述
 * 矩阵的最大值
 */
public class MaxMatrix1 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[][] matrix = new int[n][n];
        for (int i = 0; i < matrix.length; i++) {
            String s = scanner.nextLine();
            String[] split = s.split(",");
            for (int j = 0; j < matrix[i].length; j++) {
                matrix[i][j] = Integer.parseInt(split[j]);
            }
        }
        int res = 0;
        System.out.println(res);
    }

    // split 方法，使用 Java 的 `split` 直接实现
    public static List<String> split(String str, String delimiter) {
        return Arrays.asList(str.split(delimiter));
    }

    // 数据量较小，直接使用暴力枚举
    public static int getMaxNum(List<String> nums) {
        List<String> res = new ArrayList<>();
        int n = nums.size();
        for (int i = 0; i < n; i++) {
            if (nums.get(i).equals("1")) {
                StringBuilder s = new StringBuilder();
                for (int j = 0; j < n; j++) {
                    s.append(nums.get((i + j) % n));
                }
                res.add(s.toString());
            }
        }

        // 说明全为 0
        if (res.isEmpty()) {
            return 0;
        }

        // 借助字符串排序
        Collections.sort(res);
        String maxValueStr = res.get(res.size() - 1);

        // 二进制转十进制
        return Integer.parseInt(maxValueStr, 2);
    }

    public static void main2(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = Integer.parseInt(scanner.nextLine()); // 读取整数
        List<List<String>> ans = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            ans.add(split(scanner.nextLine(), ",")); // 读取并拆分
        }
        scanner.close();

        int sum = 0;
        for (List<String> lst : ans) {
            sum += getMaxNum(lst);
        }

        System.out.println(sum);
    }
}
